package cn.hss.thread;

/**包子铺类,负责生产包子
 * @author 作者：HeShaoShuai
 * @Email 邮箱：2569819541@qq.com
 * @Date 日期：2023/4/28 16:23
 * @Package 包名：cn.hss.thread
 * @Project 项目名：JavaSE
 * @Version 1.0
 */
public class BaoZiShop extends Thread{
	//包子铺生成包子
	private BaoZi bz;
	public BaoZiShop(BaoZi bz){
		this.bz=bz;
	}
	//设置线程任务：生成包子
	@Override
	public void run() {
		//定义临时变量
		int count=0;
		while(true){
			//使用同步代码块保证两个线程只有一个执行
			synchronized (bz){
				//首先对包子的状态flag进行判读，释放存在
				if(bz.flag){//有包子，等待顾客吃完当前包子
					try {
						//调用wait方法进入等待状态，
						bz.wait();
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				//没有包子就开始生成包子
				if(count++ % 2==0){
					//生成冰皮豆腐馅包子
					bz.skin="冰皮";
					bz.stuffing="豆腐馅";
				}else{
					//生成薄皮牛肉大葱馅包子
					bz.skin="薄皮";
					bz.stuffing="牛肉大葱馅";
				}
				System.out.println("包子铺正在生产"+
						bz.skin+bz.stuffing+"包子");
				try {
					//模拟生成包子需要3秒钟
					Thread.sleep(3000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				//修改包子的状态为true,表示有包子了
				bz.flag=true;
				System.out.println("包子铺已经生产好了"+
						bz.skin+bz.stuffing+"包子，可以开吃");
				//唤醒消费者线程，让其吃包子
				bz.notify();
			}
		}
	}
}